package com.fh.utils;


import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

@Slf4j
@Component
public class JwtUtils {
    @Autowired
    private RedisUtils redisUtils;


    /**
     * @description: springboot的定时任务
     * @author whf
     * @date 2023/4/25 16:18
     * @return java.lang.String
     */
    private byte[] getKey(){
        return SixSecretKey.api;
    }

    /**
     * 根据用户信息生成JWT Token
     * @param userid   用户ID
     * @param username 用户名
     * @return 生成的Token字符串
     */
    public  String generateToken(String userid, String username) {
        String token = Jwts.builder()
                .setSubject(userid)
                .claim("username", username)
                .setIssuer("whf_one")
                .signWith(SignatureAlgorithm.HS256, getKey())
                .compact();
        boolean add = redisUtils.add(userid, token);
        if(!add){
            String redisToken = redisUtils.getToken(userid);
            return redisToken;
        }
        return token;
    }

    /**
     * 解析Token，获取包含在Token中的用户信息
     *
     * @param token Token字符串
     * @return 包含在Token中的用户信息
     */
//    public boolean parseToken(String userid,String token) {
//        String judgment = redisUtils.getToken(userid);
//        if(!StringUtils.hasText(judgment)) {
//            throw new RuntimeException("Token失效或不存在");
//        }
//
//        if(token.equals(judgment)){
//            return true;
//        }
//        return false;
//    }

//        Claims claims = Jwts.parser()
//                .setSigningKey(getKey())
//                .parseClaimsJws(token)
//                .getBody();
//         校验Token的签发者等其他信息
//        String issuer = claims.getIssuer();
//        if(!"whf_one".equals(issuer)) {
//            throw new RuntimeException("Token的签发者错误");
//        }

}
